﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Windows.Threading;
//using System.Drawing;
//using System.Drawing.Imaging;

//namespace WebCam.Data.WebCamWorker
//{
//    public class PPController : ISimpleWebCam
//    {
//        const int interval = 1000 / 30;
//        OneShot shot;
//        Rectangle rect;
//        Bitmap oldImage = null;
//        Color alarmColor;
//        const int delta = 70;

//        DispatcherTimer timer = new DispatcherTimer();
//        public void Start()
//        {
//            if (shot != null)
//            {
//                shot.stopCam();
//            }
//            shot = new OneShot();
//            shot.InitcamNew();

//            timer.Interval = new TimeSpan(0, 0, 0, 0, interval);
//            timer.Tick += new EventHandler(timer_Tick);
//            timer.Start();
//        }

//        object lock_Obj = new object();

//        void timer_Tick(object sender, EventArgs e)
//        {
//            GetImage();
//        }

//        protected void GetImage()
//        {
//            shot.UpdateImage();
//            Bitmap image = shot.AcurrShot;

//            if (oldImage == null)
//            {
//                oldImage = image;
//                return;
//            }

//            Bitmap tmp = (Bitmap)image.Clone();

//            BitmapData imageData = image.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
//            BitmapData oldImageData = oldImage.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
//            BitmapData tmpData = tmp.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

//            unsafe
//            {
//                byte* pImage = (byte*)imageData.Scan0.ToPointer();
//                byte* pOldImage = (byte*)oldImageData.Scan0.ToPointer();
//                byte* pTmpImage = (byte*)tmpData.Scan0.ToPointer();

//                //int index = 0;
//                for (int i = 0; i < Width; i++)
//                {
//                    for (int j = 0; j < Height; j++)
//                    {
//                        byte r = *pImage;
//                        byte g = *(pImage + 1);
//                        byte b = *(pImage + 2);

//                        byte or = *(pOldImage);
//                        byte og = *(pOldImage + 1);
//                        byte ob = *(pOldImage + 2);

//                        //if (Math.Abs(r - or) + Math.Abs(g - og) + Math.Abs(b - ob) < 150)
//                        if (Math.Abs(r - or) > delta || Math.Abs(g - og) > delta || Math.Abs(b - ob) > delta)
//                        {
//                            *pTmpImage = 0;
//                            *(pTmpImage + 1) = 0;
//                            *(pTmpImage + 2) = 255;
//                        }

//                        pImage += 3;
//                        pOldImage += 3;
//                        pTmpImage += 3;
//                        //index++;
//                    }
//                }
//            }

//            image.UnlockBits(imageData);
//            oldImage.UnlockBits(oldImageData);
//            tmp.UnlockBits(tmpData);

//            oldImage = image;

//            if (OnBitmapLoaded != null)
//            {
//                lock (lock_Obj)
//                {
//                    //Bitmap bmp = GetImage();
//                    if (OnBitmapLoaded != null)
//                    {
//                        OnBitmapLoaded(tmp);
//                    }
//                }
//            }
//        }
//        public void Stop()
//        {
//            timer.Stop();
//            shot.stopCam();
//        }

//        public event BitmapLoader OnBitmapLoaded;

//        public int Width
//        {
//            get { return 640; }
//        }

//        public int Height
//        {
//            get { return 480; }
//        }

//        public double FPS
//        {
//            get { return interval; }
//        }
//    }
//}
